from crypt import methods
from pkgutil import get_data
import re
from sys import get_asyncgen_hooks
from flask import Flask, jsonify, redirect, request, session
from itsdangerous import json

app = Flask(__name__)
# 自定义一个session——key
app.secret_key='qinghuanhuan'

@app.route("/")
def hello_world():
    return "Hello, World!<br/>啊哈哈哈哈"

@app.route('/hello')
def hello():
    return 'This is Hello'

@app.route('/hey<int:id>')
def hey(id):
    return 'Hey %s' % (id + id)

# 重定向
@app.route('/baidu')
def baidu():
    return redirect('https://www.baidu.com')

# post请求测试
@app.route('/test_post',methods=['POST'])
def test_post():
    test_post = request.get_json()       #新建变量名，要求请求为json格式
    print(test_post)                    #后台打印发送的请求
    return 'POST请求发送成功'            #请求发送成功后返回   

#post请求进阶，判断是否缺少参数，判断请求错误
@app.route('/testpost',methods=['POST'])
def testpost():
    try:
         a = request.get_json()
         my_name = a.get('name')             #获取发送的数据
         my_age = a.get('age')
         if not all([my_name,my_age]):       #if判断是否发送完整参数，否则提示报错！
            return jsonify('缺少参数')
         return jsonify(name=my_name,age=my_age)             #返回json格式
    except  Exception as e:
        print(e)
        return '出错了哦，请查看是否正确访问'

@app.route('/login',methods=['POST'])
def login():
    # 账号：qinghuan
    # 密码：qinghuan
    get_data = request.get_json()   #拿到发送的数据

    username = get_data.get('username')     #定义username变量并赋值

    password = get_data.get('password')     #定义变量并赋值

    if not all([username,password]):        #判断参数是否完整
        return jsonify(msg='参数不完整')

    if username =='qinghuan' and password =='qinghuan': #如果验证通过，保存登录状态到session中
        session['username'] = username
        session['password'] = password
        return jsonify(msg='登录成功！')
    else:
        return jsonify(msg="账号密码错误！")

#利用session检测登录状态
@app.route('/session',methods=['GET'])
def check_login():
    username = session.get('username')          #从session中获取username
    if username is not None:
        return jsonify(msg='用户已登录！')
    else:
        return jsonify(msg='请登录')

# 利用session退出登录
@app.route('/loginout',methods=['GET'])
def login_out():
    session.clear()         #利用session自带的函数方法
    return jsonify(msg='退出登录成功！')